package unq.tpi.persistencia.alumnos.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import unq.tpi.persistencia.alumnos.exceptions.CalificacionException;
import unq.tpi.persistencia.alumnos.exceptions.InscripcionException;

public class Alumno extends Persona implements Serializable {
	private static final long serialVersionUID = 1L;
	//private Date ingreso;
	private List<Cursada> cursadas = new ArrayList<Cursada>();
/*
	public Date getIngreso() {
		return ingreso;
	}

	public void setIngreso(Date ingreso) {
		this.ingreso = ingreso;
	}
*/
	public boolean aprobo(Materia materia){
		for (Cursada c : cursadas) {
			if(c.getMateria().equals(materia) && c.aprobo())
				return true;
		}
		return false;
	}

	public void inscribirA(Materia materia) {
		if(this.aprobo(materia))
			throw new InscripcionException("El alumno ya tiene aprobada la materia");
		
		if(this.isInscripto(materia))
			throw new InscripcionException("El alumno ya esta inscripto");
		
		Cursada cursada = materia.cursoActual().inscribir(this);
		this.cursadas.add(cursada);
	}

	public boolean isInscripto(Materia materia) {
		for (Cursada c : cursadas) {
			if(c.getMateria().equals(materia))
				return true;
		}
		return false;
	}
	
	public Cursada getCursadaActual(Materia materia){
		for (Cursada c : cursadas) {
			if(c.getMateria().equals(materia) && c.isSinNota())
				return c;
		}
		return null;		
	}

	public void calificar(Materia materia, int nota) {
		Cursada actual = this.getCursadaActual(materia);
		if(actual == null)
			throw new CalificacionException("No tiene una inscripcion a la materia");
		
		actual.setNota(nota);
	}

	public List<Cursada> getCursadas() {
		return cursadas;
	}

	public void setCursadas(List<Cursada> cursadas) {
		this.cursadas = cursadas;
	}
}
